import { Component, OnInit } from '@angular/core';
import WebIM from 'easemob-websdk';

const conn = new WebIM.connection({
  isMultiLoginSessions: WebIM.config.config.isMultiLoginSessions,
  https: typeof WebIM.config.config.https === 'boolean' ? WebIM.config.config.https : location.protocol === 'https:',
  url: WebIM.config.config.xmppURL,
  heartBeatWait: WebIM.config.config.heartBeatWait,
  autoReconnectNumMax: WebIM.config.config.autoReconnectNumMax,
  autoReconnectInterval: WebIM.config.config.autoReconnectInterval,
  apiUrl: WebIM.config.config.apiURL,
  isAutoLogin: true
});

@Component({
  selector: 'app-web-im',
  templateUrl: './web-im.component.html',
  styleUrls: ['./web-im.component.scss']
})
export class WebImComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    conn.listen({
      onOpened: (message) => {
        // 连接成功回调
        // 如果isAutoLogin设置为false，那么必须手动设置上线，否则无法收消息
        // 手动上线指的是调用conn.setPresence(); 如果conn初始化时已将isAutoLogin设置为true
        // 则无需调用conn.setPresence();
        console.log(message);
      },
      onClosed: (message) => { },         // 连接关闭回调
      onTextMessage: (message) => { },    // 收到文本消息
      onEmojiMessage: (message) => { },   // 收到表情消息
      onPictureMessage: (message) => { }, // 收到图片消息
      onCmdMessage: (message) => { },     // 收到命令消息
      onAudioMessage: (message) => { },   // 收到音频消息
      onLocationMessage: (message) => { }, // 收到位置消息
      onFileMessage: (message) => { },    // 收到文件消息
      onVideoMessage: (message) => {
        const node = document.getElementById('privateVideo');
        const option = {
          url: message.url,
          headers: {
            Accept: 'audio/mp4'
          },
          onFileDownloadComplete: (response) => {
            const objectURL = WebIM.utils.parseDownloadResponse.call(conn, response);
            // node.src = objectURL;
          },
          onFileDownloadError: () => {
            console.log('File down load error.');
          }
        };
        WebIM.utils.download.call(conn, option);
      },   // 收到视频消息
      onPresence: (message) => { },       // 处理“广播”或“发布-订阅”消息，如联系人订阅请求、处理群组、聊天室被踢解散等消息
      onRoster: (message) => { },         // 处理好友申请
      onInviteMessage: (message) => { },  // 处理群组邀请
      onOnline: () => { },                  // 本机网络连接成功
      onOffline: () => { },                 // 本机网络掉线
      onError: (message) => { },          // 失败回调
      onBlacklistUpdate: (list) => {       // 黑名单变动
        // 查询黑名单，将好友拉黑，将好友从黑名单移除都会回调这个函数，list则是黑名单现有的所有好友信息
        console.log(list);
      },
      onReceivedMessage: (message) => {
        console.log(message, 'onReceivedMessage');
      },    // 收到消息送达服务器回执
      onDeliveredMessage: (message) => {
        console.log(message, 'onDeliveredMessage');
       },   // 收到消息送达客户端回执
      onReadMessage: (message) => {
        console.log(message, 'onReadMessage');
       },        // 收到消息已读回执
      onCreateGroup: (message) => {
        console.log(message, 'onCreateGroup');
       },        // 创建群组成功回执（需调用createGroupNew）
      onMutedMessage: (message) => {
        console.log(message, 'onMutedMessage');
       }        // 如果用户在A群组被禁言，在A群发消息会走这个回调并且消息不会传递给群其它成员
    });
  }

  btnClick() {
    console.log(WebIM.config);
    const options = {
      apiUrl: WebIM.config.config.apiURL,
      user: '1054191102',
      pwd: '123456789',
      // user: '17864117370',
      // pwd: '123456789',
      appKey: WebIM.config.config.appkey
    };
    conn.open(options);
  }

  btnMessage() {
    // let sendPrivateText = function () {
    const id = conn.getUniqueId();                 // 生成本地消息id
    const msg = new WebIM.message('txt', id);      // 创建文本消息
    msg.set({
      msg: 'g3hb45uh52h53',                  // 消息内容
      to: '17864117370',                          // 接收消息对象（用户id）
      roomType: false,
      success: (uid, serverMsgId) => {
        console.log('send private text Success', uid);
      },
      fail: (e) => {
        console.log('Send private text error');
      }
    });
    msg.body.chatType = 'singleChat';
    conn.send(msg.body);
    // };
  }
}
